package code07_面向对象;

import java.util.Scanner;

/**
 * @author 黄衡熙
 * @version 1.0
 * @date 2025年07月21日13:50
 */
public class Test03_全局变量与局部变量 {
    public static void main(String[] args) {
        Account account = new Account();
        account.name = "admin";
        account.money = 5000;
//        account.record();
//        account.print();
//        System.out.println("--------------------------");
//        account.show("jack");
//        System.out.println("--------------------------");
//        Account account2 = new Account();
//        account2.name = "lucy";
//        account2.money = 8000;
//        account2.show("tom");
//        System.out.println("--------------------------");
//        // account对象name:admin
//        account.print();
//        // account2对象name:lucy
//        account2.print();

        account.showMenu();
    }

}

class Account {
    // 在类体中定义的变量称之为全局变量,也就是成员,在整个类中都生效
    String name;
    double money;

    // 方法的参数列表中的变量属于局部变量,只在当前方法中生效
    public void show(String name) {
        // 在方法内部定义的变量属于局部变量,只在当前方法中生效
        double money = 10000;
        String gender = "男";
        // 当局部变量与全局变量同名时,访问的局部变量
//        System.out.println(name);
//        System.out.println(money);
//        // 局部变量必须先赋值后访问
//        System.out.println(gender);

        // 如果想要访问全局变量,需要通过this关键字来实现
        // this表示的是当调用该方法的时候,调用者是谁,this就表示谁
        System.out.println(this.name);
    }

    public void record() {
        System.out.println(name);
        System.out.println(money);
    }

    public void print() {
        System.out.println("调用该方法的对象的name属性值:" + this.name);
        // 当没有与全局变量重名的局部变量时,可以直接通过属性名访问全局变量
        System.out.println("调用该方法的对象的name属性值:" + name);
    }


    // 根据上述的账户类Account，添加几个成员方法
    public void queryMoney() {
        // 1.查询余额,打印出户主姓名与账户余额
        System.out.println("户主姓名:" + name + ",账户余额:" + money + "元");
    }

    public void saveMoney(double money) {
        // 2.存钱,打印存储了多少钱,存储后账户余额
        this.money += money;
        System.out.println("提示:您存储了" + money + "元,存款后账户余额为:" + this.money + "元");
    }

    public void transfer(String name, double money) {
        // 3.转账,打印你给谁转账,转了多少钱,转账后账户余额是多少
        if (this.money < money) {
            System.out.println("错误:您的账户余额不足,转账失败!");
        } else {
            this.money -= money;
            System.out.println("提示:恭喜您,您成功向" + name + "转账了" + money + "元,当前账户余额为:" + this.money + "元");
        }
    }

    public void getMoney(double money) {
        // 4.取钱,打印取出了多少钱,剩余的账户余额是多少
        if (this.money < money) {
            System.out.println("错误:您的账户余额不足,取款失败!");
        } else {
            this.money -= money;
            System.out.println("提示:恭喜您,成功取款" + money + "元,当前账户余额为:" + this.money + "元");
        }
    }

    public void showMenu() {
        Scanner sc = new Scanner(System.in);
        System.out.println("***********************欢迎使用账户管理系统***********************");
        while (true) {
            System.out.print("请选择服务(1.查询余额 2.存钱 3.转账 4.取钱 5.退出):");
            int choice = sc.nextInt();
            double money;

            switch (choice) {
                case 1:
                    queryMoney();
                    break;
                case 2:
                    System.out.print("请输入存款金额:");
                    money = sc.nextDouble();
                    saveMoney(money);
                    break;
                case 3:
                    System.out.print("请输入向谁转账:");
                    String name = sc.next();
                    System.out.print("请输入转账金额:");
                    money = sc.nextDouble();
                    transfer(name, money);
                    break;
                case 4:
                    System.out.print("请输入取款金额:");
                    money = sc.nextDouble();
                    getMoney(money);
                    break;
                case 5:
                    System.out.println("提示:您已经退出,欢迎下次光临");
                    return;
                default:
                    System.out.println("错误:您输入的选项有误,请重新输入!");
                    break;
            }
        }
    }
}
